within ;
model Lager

  parameter Integer produktivitaet = 1;
  parameter Integer anpassungszeit = 3;
  parameter Integer lagerkorrekturzeit = 2;

  Real nettoanstellungsrate;
  Real produktion;
  Real arbeitskraeftesoll;
  Real solllagerbestand;
  Real sollproduktion;
  Real lagerbestand(start=300);
  Real arbeitskraefte(start=300);
  Real verkauf( start=100);

equation
  when time >= 20.0 then
    verkauf = 150;
  end when;

  der(lagerbestand) = produktion - verkauf;
  der(arbeitskraefte) = nettoanstellungsrate;

  nettoanstellungsrate = (arbeitskraeftesoll - arbeitskraefte) / anpassungszeit;
  produktion = arbeitskraefte * produktivitaet;
  arbeitskraeftesoll = sollproduktion / produktivitaet;
  solllagerbestand = 3 * verkauf;

  if lagerbestand < solllagerbestand then
    sollproduktion = verkauf + ((solllagerbestand - lagerbestand) / lagerkorrekturzeit);
  else
    sollproduktion = 0;
  end if;

  annotation (
    experiment(StopTime=100),
    experimentSetupOutput,
    uses(Modelica(version="3.0")));
end Lager;
